package plan;

import java.net.InetAddress;
import java.net.UnknownHostException;

import foundation.fileUtil.FileNameUtil;
import foundation.fileUtil.PropFileUtil;
import algorithm.Alg;
import algorithm.AlgCtx;
import algorithm.AlgFactory;
import algorithm.IAlgOperation;
import control.ExeCtx;
import control.SASolver;

public class Plan {
	String prjBasePath = FileNameUtil.getPrjPath();// ���������������
	String PlanID = "";
	InitiExeCtx initCtx = null;//���������������������
	ExeCtx exeCtx = null;//���������������

	public Plan() {
		initCtx = new InitiExeCtx();
	}
	/**
	 * ������������������������������������
	 * 
	 * @param caseName:���������������
	 * @param algName:���������������
	 * @param runNum���������������������
	 */
	public void execute(String caseName, String prefix, String algName, int runNum) {
		exeCtx=initCtx.getInitCtx(caseName, prefix, algName);//���������������������������;	
		String outExcelFileNm = null;
		AlgFactory algFactory = initCtx.getAlgFactory(caseName,algName);
		Alg alg = algFactory.createAlg();
		String algCfgFileName = prjBasePath + "demo/" + caseName + "/cfgFiles/" + algName + "Conf.properties";
		IAlgOperation ctrlEng=initCtx.getCtrlEngine(caseName, prefix, algName);
		AlgCtx algCtx = new AlgCtx(exeCtx.getRunBasePath(), algCfgFileName, ctrlEng);
		
		if (algCtx != null)
			algCtx.setAlgName(algName);
		//������������������������������������������
		PropFileUtil proFileHelper = PropFileUtil.getInstance(algCfgFileName);
		String popuSize = proFileHelper.getParameterValue("popuSize");
		//���������������
		InetAddress netAddress;
		try {
			netAddress = InetAddress.getLocalHost();
			String hostName = netAddress.getHostName();
			outExcelFileNm = prjBasePath + "demo/" + caseName + "/outFiles/" + hostName + "_" + caseName + "_" + algName
					+ "_popuSize=" + popuSize;	
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		 alg.run(algCtx, runNum, outExcelFileNm);
	}

	/**
	 * @param args
	 * 		  args[0]���������������������������
	 */
	public static void main(String[] args) {
		Plan plan = new Plan();
		int runNums = Integer.parseInt(args[0].trim());
		for (int i = 0; i < 3; i++) {
			plan.execute("mic", "brs", "DFGA", 1);
		}
		SASolver.getInstance().closeSolver();
	}
}
